
class CursoController {

    int total = 0;

    //se a url vier sem action redireciona para a create
    def index  = {
        redirect(action: "create");
    };

    //closure que carrega a tela de cadastro
    def create = {
        if(!verificaLogon()){
            return;
        }                
        params.max = Math.min(params.max ? params.int('max') : 10, 100)        
        return [cursoInstanceList: Curso.list(params), cursoInstanceTotal: Curso.count(), cursoInstance: new Curso()]       
    }

    //closure que grava o registro
    def save   = {
        if(!verificaLogon()){
            return;
        }
        //carrega os atributos e recebe os dados
        def cursoInstance = new Curso(params);
         //busca acursos cadastrados
        def cursoInstanceList = Curso.findAll();
        //se vier conta a quantidade para a paginação
        if(cursoInstanceList){
            total = cursoInstanceList.count();
        }
        //grava o registro
        if (cursoInstance.save(flush: true)) {
            flash.message = "Dados cadastrados com sucesso!";
            redirect(action: "create");
        }else {
            render(view:"create",model: [cursoInstance: cursoInstance,
                                         cursoInstanceList: cursoInstanceList,
                                         cursoInstanceTotal: total]);
        }
    };

    //closure que carrega a tela de edição de cadastro
    def edit   = {
        if(!verificaLogon()){
            return;
        }
        //carrega os atributos a partir do ID
        def cursoInstance = Curso.findById(params.id);
        //busca os cursos cadastrados
        def cursoInstanceList = Curso.findAll();
        //se vier conta a quantidade para a paginação
        if(cursoInstanceList){
            total = cursoInstanceList.count();
        }
        //se retornar dados, envia os mesmos
        if (cursoInstance){
            return [cursoInstance : cursoInstance,
                    cursoInstanceList: cursoInstanceList,
                    cursoInstanceTotal: total];
        }else {
            flash.message="Curso não encontrado!";
            redirect(action: "create");
        }
    };

    //closure que grava as alterações do registro
    def update   = {
        if(!verificaLogon()){
            return;
        }
        //carrega os atributos e recebe os dados
        def cursoInstance = Curso.get(params.id);
        cursoInstance.properties = params;
        //busca os cursos cadastrados
        def cursoInstanceList = Curso.findAll();
        //se vier conta a quantidade para a paginação
        if(cursoInstanceList){
            total = cursoInstanceList.count();
        }
        //grava as alterações
        if(cursoInstance.save()){
            flash.message = "Dados alterados com sucesso.";
            redirect(action: "create");
        }else {
            render(view:"edit",model: [cursoInstance : cursoInstance,
                                       cursoInstanceList: cursoInstanceList,
                                       cursoInstanceTotal: total]);
        }
    };

    //closure que exclui os registros
    def delete = {
        if(!verificaLogon()){
            return;
        }
        //carrega os atributos do registro a partir do ID
        def cursoInstance = Curso.findById(params.id)
        //exclui o registro
        cursoInstance.delete();
        flash.message = "Registro excluido com sucesso.";
        redirect(action: "create");
    };

    /*
     * Método que verifica se o usuário está logado.
     * Se não estiver logado é redirecionado para home
     */
    private boolean verificaLogon() {
        if(!session["pessoa"]){
            flash.message = "Você precisa estar logado para acessar esta página.";
            redirect(controller:'login', action:'auth');
            return false;
        }

        return true;
    }

}

